import { API } from '@/config/api.js'

/**
 * 账号密码登录
 * @param {Object} data - 登录数据
 * @param {string} data.phone - 手机号
 * @param {string} data.password - 密码
 * @returns {Promise} 返回登录结果
 */
export function login(data) {
  return new Promise((resolve, reject) => {
    // 验证登录参数
    if (!data.phone) {
      reject({ code: 500, msg: '手机号不能为空' });
      return;
    }
    
    if (!data.password) {
      reject({ code: 500, msg: '密码不能为空' });
      return;
    }
    
    // 打印登录数据，用于调试
    console.log('API登录数据:', data);
    
    // 构建后端需要的参数格式
    const requestData = {
      phone: data.phone,
      password: data.password
    };
    
    uni.request({
      url: API.USER.LOGIN,
      method: 'POST',
      data: requestData,
      success: (res) => {
        if (res.data && res.data.code === 200) {
          // 存储token
          if (res.data.token) {
            uni.setStorageSync('token', res.data.token)
          }
          // 存储用户信息
          if (res.data.userInfo) {
            uni.setStorageSync('userInfo', res.data.userInfo)
          }
          resolve(res.data)
        } else {
          uni.showToast({
            title: res.data.msg || '登录失败',
            icon: 'none',
            duration: 3000
          })
          reject(res.data)
        }
      },
      fail: (err) => {
        uni.showToast({
          title: '网络请求失败',
          icon: 'none'
        })
        reject(err)
      }
    })
  })
}

/**
 * 用户注册
 * @param {Object} data - 注册数据
 * @param {string} data.phone - 手机号
 * @param {string} data.code - 验证码
 * @param {string} data.password - 密码
 * @returns {Promise} 返回注册结果
 */
export function register(data) {
  return new Promise((resolve, reject) => {
    // 打印注册数据
    console.log('API注册数据:', data);
    
    // 确保有手机号字段
    if (!data.phone && data.phonenumber) {
      data.phone = data.phonenumber;
    } else if (!data.phone) {
      reject({ code: 500, msg: '手机号不能为空' });
      return;
    }
    
    uni.request({
      url: API.USER.REGISTER,
      method: 'POST',
      data,
      success: (res) => {
        if (res.data && res.data.code === 200) {
          // 存储token
          if (res.data.token) {
            uni.setStorageSync('token', res.data.token)
          }
          // 存储用户信息
          if (res.data.userInfo) {
            uni.setStorageSync('userInfo', res.data.userInfo)
          }
          resolve(res.data)
        } else {
          uni.showToast({
            title: res.data.msg || '注册失败',
            icon: 'none'
          })
          reject(res.data)
        }
      },
      fail: (err) => {
        uni.showToast({
          title: '网络请求失败',
          icon: 'none'
        })
        reject(err)
      }
    })
  })
}

/**
 * 发送短信验证码
 * @param {Object} data - 验证码数据
 * @param {string} data.phone - 手机号
 * @returns {Promise} 返回发送结果
 */
export function sendCode(data) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: API.USER.SEND_CODE,
      method: 'POST',
      data,
      success: (res) => {
        if (res.data && res.data.code === 200) {
          resolve(res.data)
        } else {
          uni.showToast({
            title: res.data.msg || '发送验证码失败',
            icon: 'none'
          })
          reject(res.data)
        }
      },
      fail: (err) => {
        uni.showToast({
          title: '网络请求失败',
          icon: 'none'
        })
        reject(err)
      }
    })
  })
}

/**
 * 忘记密码
 * @param {Object} data - 修改密码数据
 * @param {string} data.phone - 手机号
 * @param {string} data.code - 验证码
 * @param {string} data.password - 新密码
 * @returns {Promise} 返回修改结果
 */
export function forgotPassword(data) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: API.USER.FORGOT_PASSWORD,
      method: 'POST',
      data,
      success: (res) => {
        if (res.data && res.data.code === 200) {
          resolve(res.data)
        } else {
          uni.showToast({
            title: res.data.msg || '修改密码失败',
            icon: 'none'
          })
          reject(res.data)
        }
      },
      fail: (err) => {
        uni.showToast({
          title: '网络请求失败',
          icon: 'none'
        })
        reject(err)
      }
    })
  })
} 